package net.loststone

import java.io.IOException;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.io.IOUtils;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;

class IneService {

  static final String DESPESA_MITJANA_LLARS = "http://www.ine.es/jaxiBD/download.do?typeDownload=4&type=db&path=&file=&divi=EPF&per=12&idtab=133&descargarformato=Ir"

  boolean transactional = true

  /**
   * Agafa l'informacó 'internet si la pàgina no rebenta. Normalment rebenta.
   */
  String agafarDespesaMitjanaLlars() {
    def stream = getCSV(DESPESA_MITJANA_LLARS);
    if (stream.length > 1)
      processDMLL(stream)
    else {
      log.error "INE KK"
      println("no torna.");
    }
  }

  String agafarDespesaMitjanaLlarsLocal(stream) {
    
    StringWriter writer = new StringWriter();
    IOUtils.copy(stream, writer, "ISO-8859-1");
    String theString = writer.toString();
    
    def comunitats = [];

    String[] lines = theString.split("\n")
    for (String linia : lines) {
      String[] parts = linia.split(",");
      if (parts.length != 16) {
        continue
      } else {
        def comunitatPreu = [];
        comunitatPreu[0] = parts[0];
        comunitatPreu[1] = parts[7].replaceAll("\"","");

        // busqem la comunitat aquesta:
        Town comunitat = Town.findByNameAndType(comunitatPreu[0],"state");
        if (comunitat != null) {
          EconInfo econ = new EconInfo();
          econ.afecta = comunitat;
          econ.nom = "Gasto medio por hogar (persona)"
          econ.valor = Double.parseDouble(comunitatPreu[1])
          econ.font = "I.N.E."
          econ.save();
          comunitats.add(comunitatPreu[0]);
        } else {
          log.warn("Comunitat "+comunitatPreu[0]+" no trobada a la base de dades.")
        }

      }
    }
    "[INE: Gasto medio por hogar (persona)] Afegits "+ comunitats;

  }

 
  
  /**
   * processa la despesa mitjana de les llars.
   */
  def processDMLL(response) {
    def comunitats = []
    String resposta = new String(response);
    String[] lines = resposta.split("\n")
    for (String linia : lines) {
      String[] parts = linia.split(",");
      if (parts.length != 16) {
        continue
      } else {
        def comunitatPreu = []
        comunitatPreu[0] = parts[0];
        comunitatPreu[1] = parts[7];
        comunitats.add(comunitatPreu);
      }
    }
    comunitats;
  }

  /**
   * Agafa l'excel dels internets
   */
  def getCSV(url) {

    HttpClient httpClient;
    HttpMethod method;
    httpClient = new HttpClient();
    method = new GetMethod(url);

    int statusCode = httpClient.executeMethod(method);
    if (statusCode != HttpStatus.SC_OK) {
      throw new Exception("No s'ha pogut recuperar el fitxer de l'INE.");
    }

    return method.getResponseBody();

  }
    
}
